﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace Cotizav.AccesoDatos
{
    public class MarcaDAO
    {
        public List<Entidades.Marca> Listar(Util.ContextoDB ctx)
        {
            SqlCommand cmd = new SqlCommand("select * from MARCA", ctx.GetConexion(), ctx.GetTx());
            DataTable dtMarca = new DataTable();
            dtMarca.Load(cmd.ExecuteReader());

            List<Entidades.Marca> Lista = new List<Entidades.Marca>();

            foreach(DataRow fila in dtMarca.Rows)
            {
                Entidades.Marca m = new Entidades.Marca();

                m.IdMarca = Int32.Parse(fila["ID"].ToString());
                m.NombreMarca = fila["NOMBREMARCA"].ToString();
                m.Activo = Int32.Parse(fila["ACTIVO"].ToString());
                m.Prefijo = fila["PREFIJO"].ToString();
                m.Statusflag = fila["STATUSFLAG"].ToString();
                m.FechaRegistro = !(fila["FECHAREGISTRO"] is DBNull) ? Convert.ToDateTime(fila["FECHAREGISTRO"].ToString()) : new Nullable<DateTime>();
                m.FechaModificacion = !(fila["FECHAMODIFICACION"] is DBNull) ? Convert.ToDateTime(fila["FECHAMODIFICACION"].ToString()) : new Nullable<DateTime>();
                m.UsuarioRegistro = fila["USUARIOREGISTRO"].ToString();
                m.UsuarioModificacion = fila["USUARIOMODIFICACION"].ToString();

                Lista.Add(m);
            }
            
            return Lista;
        }

        public int Registrar(Util.ContextoDB ctx, Entidades.Marca newMarca)
        {
            SqlCommand cmd = new SqlCommand("USP_MARCA_INSERT", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", 0).Direction = ParameterDirection.Output;
            cmd.Parameters.AddWithValue("@PREFIJO", newMarca.Prefijo ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@NOMBREMARCA", newMarca.NombreMarca ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@ACTIVO", newMarca.Activo);
            cmd.Parameters.AddWithValue("@FECHAREGISTRO", newMarca.FechaRegistro ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@USUARIOREGISTRO", newMarca.UsuarioRegistro ?? (object)DBNull.Value);

            int result = cmd.ExecuteNonQuery();
            return result;
        }

        public int Actualizar(Util.ContextoDB ctx, Entidades.Marca updMarca)
        {
            SqlCommand cmd = new SqlCommand("USP_MARCA_UPDATE", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", updMarca.IdMarca);
            cmd.Parameters.AddWithValue("@PREFIJO", updMarca.Prefijo ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@NOMBREMARCA", updMarca.NombreMarca ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@FECHAMODIFICACION", updMarca.FechaModificacion ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@USUARIOMODIFICACION", updMarca.UsuarioModificacion ?? (object)DBNull.Value);

            int result = cmd.ExecuteNonQuery();
            return result;
        }

        public int Eliminar(Util.ContextoDB ctx, Entidades.Marca delMarca)
        {
            SqlCommand cmd = new SqlCommand("USP_MARCA_ELIMINAR", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", delMarca.IdMarca);
            int result = cmd.ExecuteNonQuery();

            return result;
        }
    }
}
